rsync从字面上的意思可以理解为remote sync (远程同步)这样可以理解的更深刻一些。Rsync不仅可以远程同步数据(类似于scp),当然还可以本地同步数据(类似于cp),但不同于cp或scp的一点是,rsync不像cp/scp一样会覆盖以前的数据(如果数据已经存在),它会先判断已经存在的数据和新数据有什么不同,只有不同时才会把不同的部分覆盖掉。如果Linux没有rsync命令使用yum安装
命令语法 1
2
3
4
5
6
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]host:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
rsync [OPTION]... [USER@]HOST::SRC DEST
rsync [OPTION]... SRC [USER@]HOST::DEST
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
对应以上六种命令格式,rsync有六种不同的工作模式:
拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号 :
分隔符时就启动这种工作模式。
使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号 :
分隔符时启动该模式。
使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号 :
分隔符时启动该模式。
1
rsync -avz foo:src/bar /data
从远程rsync服务器中拷贝文件到本地。当SRC路径信息包含“::”分隔符时启动该模式。
1
rsync -av root@192.168.78.192::www /databack
从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含“::”分隔符十启动该模式。
1
rsync -av /databack root@192.168.78.192::www
列远程机的文件列表。类似于rsync传输,不过主要在命令中省略掉本机信息即可
1
rsync -v rsync://192.168.78.192/www
命令参数
-v, –verbose 详细模式输出。
-q, –quiet 精简输出模式。
-c, –checksum 打开校验开关,强制对文件传输进行校验。
-a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。
-r, –recursive 对子目录以递归模式处理。
-R, –relative 使用相对路径信息。
-b, –backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用–suffix选项来指定不同的备份文件前缀。
–backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀。
-u, –update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件,不覆盖更新的文件。
-l, –links 保留软链结。
-L, –copy-links 想对待常规文件一样处理软链结。
–copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结。
–safe-links 忽略指向SRC路径目录树以外的链结。
-H, –hard-links 保留硬链结。
-p, –perms 保持文件权限。
-o, –owner 保持文件属主信息。
-g, –group 保持文件属组信息。
-D, –devices 保持设备文件信息。
-t, –times 保持文件时间信息。
-S, –sparse 对稀疏文件进行特殊处理以节省DST的空间。
-n, –dry-run现实哪些文件将被传输。
-w, –whole-file 拷贝文件,不进行增量检测。
-x, –one-file-system 不要跨越文件系统边界。
-B, –block-size=SIZE 检验算法使用的块尺寸,默认是700字节。
-e, –rsh=command 指定使用rsh、ssh方式进行数据同步。
–rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息。
-C, –cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件。
–existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件。
–delete 删除那些DST中SRC没有的文件。
–delete-excluded 同样删除接收端那些被该选项指定排除的文件。
–delete-after 传输结束以后再删除。
–ignore-errors 及时出现IO错误也进行删除。
–max-delete=NUM 最多删除NUM个文件。 -
-partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输。
–force 强制删除目录,即使不为空。
–numeric-ids 不将数字的用户和组id匹配为用户名和组名。
–timeout=time ip超时时间,单位为秒。
-I, –ignore-times 不跳过那些有同样的时间和长度的文件。
–size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间。
–modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0。
-T –temp-dir=DIR 在DIR中创建临时文件。
–compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份。
-P 等同于 –partial。
–progress 显示备份过程。
-z, –compress 对备份的文件在传输时进行压缩处理。
–exclude=PATTERN 指定排除不需要传输的文件模式。
–include=PATTERN 指定不排除而需要传输的文件模式。
–exclude-from=FILE 排除FILE中指定模式的文件。
–include-from=FILE 不排除FILE指定模式匹配的文件。
–version 打印版本信息。
–address 绑定到特定的地址。
–config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件。
–port=PORT 指定其他的rsync服务端口。
–blocking-io 对远程shell使用阻塞IO。
-stats 给出某些文件的传输状态。
–progress 在传输时现实传输过程。
–log-format=formAT 指定日志文件格式。
–password-file=FILE 从FILE中得到密码。
–bwlimit=KBPS 限制I/O带宽,KBytes per second。
-h, –help 显示帮助信息。
常用选项:-a、-v、–delete、–exclude
使用实例 试验准备
1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~]
[root@localhost ~]
[root@localhost rsync]
[root@localhost rsync]
[root@localhost test1]
[root@localhost test1]
[root@localhost test1]
总用量 0
-rw-r--r-- 1 root root 0 6月 10 12:58 1
lrwxrwxrwx 1 root root 13 6月 10 12:59 123.txt -> /root/123.txt
-rw-r--r-- 1 root root 0 6月 10 12:58 2
-rw-r--r-- 1 root root 0 6月 10 12:58 3
[root@localhost test1]
实例1:使用-a选项 1
2
3
4
5
[root@localhost rsync]
[root@localhost rsync]
test1
[root@localhost rsync]
1 123.txt 2 3
这里有一个问题,就是本来想把test1目录直接拷贝成test2目录,可结果rsync却新建了test2目录,然后把test1目录放到了test2目录中。为了避免这样的情况,可以这样做:
1
2
3
4
5
6
7
8
[root@localhost rsync]
[root@localhost rsync]
[root@localhost rsync]
总用量 0
-rw-r--r-- 1 root root 0 6月 10 12:58 1
lrwxrwxrwx 1 root root 13 6月 10 12:59 123.txt -> /root/123.txt
-rw-r--r-- 1 root root 0 6月 10 12:58 2
-rw-r--r-- 1 root root 0 6月 10 12:58 3
加个斜杠就可以了,所以建议在使用rsync备份目录时要养成加斜杠的习惯。-a选项表示以递归方式传输文件,并保持所有属性,等同于-rlptgoD。-a选项后面可以跟一个 --no-OPTION
这个表示关闭 -rlptgoD中的某一个,例如,-a--no-l
等同于 -rptgoD。下面看一看-l选项的作用:
1
2
3
4
5
6
7
8
9
10
11
[root@localhost rsync]
sending incremental file list
created directory test2
./
1
skipping non-regular file "123.txt"
2
3
sent 200 bytes received 72 bytes 544.00 bytes/sec
total size is 13 speedup is 0.05
使用-v选项看起来方便,上例跳过了非普通文件123.txt,其实123.txt是一个软连接文件,如果不使用-l选项则不理会软连接文件的。虽然加上-l选项会把软连接文件给拷贝过去,但是软连接的目标文件却没有拷贝过去。
实例2:使用-L选项 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost rsync]
sending incremental file list
created directory test2
./
1
123.txt
2
3
sent 231 bytes received 91 bytes 644.00 bytes/sec
total size is 0 speedup is 0.00
[root@localhost rsync]
总用量 0
-rw-r--r-- 1 root root 0 6月 10 12:58 1
-rw-r--r-- 1 root root 0 6月 10 12:39 123.txt
-rw-r--r-- 1 root root 0 6月 10 12:58 2
-rw-r--r-- 1 root root 0 6月 10 12:58 3
加上-L选项就可以把SRC中软连接的目标文件给拷贝到DST。
实例3:使用-u选项 首先查看一下test1/1和test2/1的创建时间(肯定是一样的),然后使用touch修改一下test2/1的创建时间(此时test2/1要比test1/1的创建时间晚了一些),如果不加-u选项的话,会把test2/1的创建时间编程和test1/1的创建时间一样。
1
2
3
4
5
6
7
8
9
[root@localhost rsync]
-rw-r--r-- 1 root root 0 6月 10 12:58 test1/1
-rw-r--r-- 1 root root 0 6月 10 12:58 test2/1
root@localhost rsync]
[root@localhost rsync]
-rw-r--r-- 1 root root 0 6月 10 13:20 test2/1
[root@localhost rsync]
[root@localhost rsync]
-rw-r--r-- 1 root root 0 6月 10 12:58 test2/1
加上-u选项后,不会再把test1/1同步为test2/1了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost rsync]
[root@localhost rsync]
-rw-r--r-- 1 root root 0 6月 10 13:31 test2/1
[root@localhost rsync]
sending incremental file list
./
123.txt -> /root/123.txt
sent 100 bytes received 18 bytes 236.00 bytes/sec
total size is 13 speedup is 0.11
[root@localhost rsync]
-rw-r--r-- 1 root root 0 6月 10 13:31 test2/1
[root@localhost rsync]
-rw-r--r-- 1 root root 0 6月 10 12:58 test1/1
实例4:使用 –delete选项 首先删除test1/123.txt
1
2
3
[root@localhost rsync]
[root@localhost rsync]
1 2 3
然后把test1/目录同步到test2/目录下
1
2
3
4
5
6
7
8
9
[root@localhost rsync]
sending incremental file list
./
1
sent 94 bytes received 34 bytes 256.00 bytes/sec
total size is 0 speedup is 0.00
[root@localhost rsync]
1 123.txt 2 3
test2/目录并没有删除掉123.txt,下面加上 --delete
选项:
1
2
3
4
5
6
7
8
[root@localhost rsync]
sending incremental file list
deleting 123.txt
sent 52 bytes received 12 bytes 128.00 bytes/sec
total size is 0 speedup is 0.00
[root@localhost rsync]
1 2 3
test2/目录里的123.txt也被删除了,这就是 --delete
选项的用处。还有一种情况就是如果在DST增加了文件了,而SRC当中没有这些文件,同步时加上 --delete
选项后同样会删除新增的文件:
1
2
3
4
5
6
7
8
9
10
[root@localhost rsync]
[root@localhost rsync]
1 2 3
[root@localhost rsync]
1 2 3 4
[root@localhost rsync]
[root@localhost rsync]
1 2 3
[root@localhost rsync]
1 2 3
实例5:使用 –exclude选项 1
2
3
4
5
6
[[root@localhost rsync]
[root@localhost rsync]
[root@localhost rsync]
1 2 3 4
[root@localhost rsync]
1 2 3
另外还可以使用匹配字符 *
1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost rsync]
[root@localhost rsync]
1 1.txt 2 2.txt 3 4
[root@localhost rsync]
sending incremental file list
./
4
0 100% 0.00kB/s 0:00:00 (xfer
sent 104 bytes received 34 bytes 276.00 bytes/sec
total size is 0 speedup is 0.00
[root@localhost rsync]
1 2 3 4
上例中,连带着使用了 --progress
选项,这个主要是用来观察rsync同步过程的状态的。简单总结一下,平时使用rsync同步数据的时候,使用-a选项基本上就可以达到想要的效果了,只是有时候会有个别的需求,会用到 -a --no-OPTION
, -u
, -L
, --delete
, --exclude
以及 --progress
这些选项。
实例6:ssh隧道方式 1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@localhost rsync]
www@192.168.0.101's password:
sending incremental file list
created directory /tmp/test2
./
1
1.txt
2
2.txt
3
4
sent 327 bytes received 129 bytes 182.40 bytes/sec
total size is 0 speedup is 0.00
这种方式是通过ssh拷贝数据,需要输入192.168.0.101那台机器www账户的密码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost rsync]
www@192.168.0.101's password:
receiving incremental file list
created directory ./test3
./
1
1.txt
2
2.txt
3
4
sent 128 bytes received 351 bytes 38.32 bytes/sec
total size is 0 speedup is 0.00
以上两种凡是如果写到脚背里,备份起来就有麻烦了,因为要输入密码,脚本本来就是自动的,不可能做到。但是不代表没有解决办法。那微是统计过密钥验证,密钥不设立密码就ok了。
在操作以前先设置主机信息:192.168.0.10(主机名yanyi-1)和192.168.0.101(主机名yanyi),需要从yanyi-1拷贝数据到yanyi上。
首先确认一下yanyi-1上是否有这个文件 /root/.ssh/id_rsa.pub
1
2
[root@yanyi-1 ~]
Generating public/private rsa key pair.
如果Linux不存在这个文件,按如下方法生成:
1
2
3
4
5
6
7
8
9
[root@yanyi-1 ~]
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
3b:74:af:e8:08:ac:99:30:3f:ef:84:7a:a0:a6:3d:89 root@Aming-1
在这个过程中会有一些交互的过程,它首先提示要输入这个密钥的密码,出于安全考虑应该定义个密码,但是目的就是为了自动化同步数据,所以这里不输入任何密码,直接按回车,即密码为空。最后则生成了私钥 /root/.ssh/id_rsa
和公钥文件 /root/.ssh/id_rsa.pub
把公钥文件的内容拷贝到目标机器上:
1
2
root@yanyi-1 ~]
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA5SPyJ/kliGTAMUan/GCN325VS8jMxvOn4uQoLU/NqBpCI3MrmvSucv6EAzxx1J2uOssW08el06LG+cUwXmm5mkqDRBV6C9qNnR/bVV5vr3QsUwbKPr7fdyJvruQWWR7cSL+mjP0SYmG2Qy2JcM3hl1IZArzC6yeUnq2Gwbax8LgbZE3XfRfOYdimwyh5Tfft7yLYipWc37k+oRUWkI3mW7PalsOlfQhxrLD/lS891y6RdSbGxMJWPoV0KMFbVh+uJgyAXpeuWl+F+/iuQPzb6w3h4pWI31bvbsE9BU82jSzHYEjpq3SN2MJN2vaLs5a0mVpm9zka/h4ITFB8Uy1iSQ== root@yanyi-1
复制主机yanyi-1的 /root/.ssh/id_rsa.pub
文件内容,并粘贴到主机yanyi的 /home/www/.ssh/authorized_keys
中:
这一步也许会遇到/home/www/.ssh目录不存在的问题,可以手动创建,并修改目录权限为700,也可以执行 ssh-krygen
命令生成这个目录。保存/home/www/.ssh/authorized_keys文件后,再到主机yanyi-1上执行:
1
2
3
[root@yanyi-1 ~]
Last login: Wed Jun 12 12:24:34 2013 from 192.168.0.10
[www@yanyi ~]$
现在不用输入密码也可以登录主机yanyi了。下面先用yanyi主机退出来,再从主机yanyi-1上执行rsync命令:
1
2
3
4
5
6
7
8
9
10
11
12
13
[root@yanyi-1 ~]
sending incremental file list
created directory /tmp/test4
./
1
1.txt
2
2.txt
3
4
sent 327 bytes received 129 bytes 912.00 bytes/sec
total size is 0 speedup is 0.00
实例7:后台服务方式 这种方式可以理解成,在远程主机上建立一个rsync的服务器,在服务器上匹配好rsync的各种应用,然后本机作为rsync的一个客户端去连接远程的rsync服务器。
1、建立并配置rsync的配置文件 /etc/rsyncd.conf 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@yanyi-1 ~]# vim /etc/rsyncd.conf
# port=873
log file=/var/log/rsync.log
pid file=/var/run/rsyncd.pid
# address=192.168.0.10
[test]
path=/root/rsync
use chroot=true
max connections=4
read only=no
list=true
uid=root
gid=root
auth users=test
secrets file=/etc/rsyncd.passwd
hosts allow=192.168.0.101
其中配置文件分为两部分:全局置部分和模块配置部分。全局部分就是几个参数而已,就像rsyncd.conf中port、log file、pid file、address这些都属于全局配置。而 [test]以下部分就是模块配置部分了。一个配置文件中可以有多个模块,模块名自定义,格式就像rsyncd.conf中的这样。其实模块中的一些参数例如,use chroot、max connections、uid、gid、auth users、secrets file以及hosts allow都恶意可配置成全局的参数。当然给出的参数并不是所有的,可以通过 man rsyncd.conf
获得更多信息。
下面简单解释一下这些参数的意义 :
port 指定在哪个端口启动rsyncd服务,默认是873
log file 指定日志文件
pid file 指定pid文件,这个文件的作用涉及到服务的启动以及停止等进程管理操作
address 指定启动rsyncd服务的IP,假如你的机器有多个IP,就可以指定其中一个启动rsyncd服务,默认是在全部IP上启动
[test] 指定模块名,自定义
path 指定数据存放的路径
use chroot true|false 默认是true,意思是在传输文件以前首先chroot到path参数所指 定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要以roots权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true,如果数据当中有软连接文件的话建议设置成false。
max connections 指定最大的连接数,默认是0即没有限制
read only ture|false 如果为true则不能上传到该模块指定的路径下
list 指定当用户查询该服务器上的可用模块时,该模块是否被列出,设定为true则列出,false则隐藏
uid/gid 指定传输文件时,以哪个用户/组的身份传输
auth users 指定传输时要使用的用户名
secrets file 指定密码文件,该参数连同上面的参数如果不指定则不使用密码验证,注 意该密码文件的权限一定要是600
hosts allow 指定被允许连接该模块的主机,可以是IP或者网段,如果是多个,之间用空格隔开
2、编辑secrets file,保存后要赋予600权限,如果权限不对,不能完成同步 1
2
3
[root@yanyi-1 ~]
test :test123
[root@yanyi-1 ~]
3、启动rsync服务
启动后,可以查看一下日志,并查看端口是否启动:
1
2
3
4
[root@yanyi-1 ~]
[root@yanyi-1 ~]
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 12066/rsync
tcp 0 0 :::873 :::* LISTEN 12066/rsync
如果想开机启动,把 rsync --daemon --config=/etc/rsyncd.conf
写入到 /etc/rc.d/rc.local
文件中。
4、到另一台机器上测试 1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@yanyi ~]
Password:
receiving incremental file list
created directory /tmp/test5
./
1
1.txt
2
2.txt
3
4
sent 143 bytes received 354 bytes 994.00 bytes/sec
total size is 0 speedup is 0.00
刚提到有一个选项叫做 use chroot
默认为true,如果为true,同步的文件中有软连接,则会有问题。首先在主机yanyi-1的/root/rsync/test1/目录下创建一个软连接文件:
1
2
3
[root@yanyi-1 ~]
[root@yanyi-1 ~]
lrwxrwxrwx 1 root root 14 6月 12 13:24 rsync/test1/test.txt -> /root/test.txt
然后再到主机yanyi上同步:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@yanyi ~]
Password:
receiving incremental file list
symlink has no referent: "/test1/test.txt" (in test )
created directory /tmp/test6
./
1
1.txt
2
2.txt
3
4
sent 143 bytes received 419 bytes 1124.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code
23) at main.c(1532) [generator=3.0.6]
可以看到,如果设置 use chroot
为true则同步软连接文件会有问题,把主机yanyi-1的rsync配置文件修改一下,把true改为false:
1
2
3
[root@yanyi-1 ~]
[root@yanyi-1 ~]
use chroot=false
然后再到主机yanyi上再次执行同步:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@yanyi ~]
Password:
receiving incremental file list
created directory /tmp/test7
./
1
1.txt
2
2.txt
3
4
test.txt
sent 162 bytes received 410 bytes 1144.00 bytes/sec
total size is 0 speedup is 0.00
这样就没有任何问题了。为什么修改完rsyncd.conf配置文件后,没有重启rsyncd服务?其实这是rsync的一个特定机制,配置文件即实时生效的,不用重启服务。
上面的例子中,都有输入密码,这样同样不能写入脚本中自动执行,其实这种方式也是可以不用手动输入密码的,有两种实现方式:
1、指定密码文件 在客户端上,也就是主机yanyi上,编辑一个密码文件:
加入test用户的密码:
修改密码文件的权限:
在同步的时候,指定一下密码文件,就可以省去输入密码的步骤了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@yanyi ~]
receiving incremental file list
created directory /tmp/test8
./
1
1.txt
2
2.txt
3
4
test.txt
sent 190 bytes received 451 bytes 1282.00 bytes/sec
total size is 0 speedup is 0.00
2、在rsync服务器端不指定用户 在服务端也就是主机yanyi-1上修改配置文件rsyncd.conf,去掉关于认证账户的配置项(auth user和secrets file这两行):
1
sed -i 's/auth users/#auth users/;s/secrets file/#secrets file/' /etc/rsyncd.conf
上面的命令是把“auth users”和“secrets file”两行的最前面加一个“#”,这样就把这两行注释掉了,使其失去意义。sed的这种用法,只是用分号把两个替换的子命令块给替换了。然后到客户端主机yanyi上测试:
1
2
3
4
5
6
7
8
9
10
11
12
13
rsync -avL 192.168.0.10::test /test1/ /tmp/test9/
receiving incremental file list
created directory /tmp/test9
./
1
1.txt
2
2.txt
3
4
test.txt
sent 162 bytes received 410 bytes 1144.00 bytes/sec
total size is 0 speedup is 0.00
注意,这里不用再加test这个用户了,默认是以root的身份拷贝的,现在已经不需要输入密码了。
实例8:根据一个文件列表文档来同步 有时候,需要根据一个文档中的文件列表来同步文件。例,1.txt是文件列表,内容为:
1
2
3
4
cat 1.txt
/data/a/a.txt
/data/b.txt
/data/c/b/c.txt
同步命令是:
1
rsync -av --files-from=1.txt / ip::module/
需要注意的是,1.txt中如果写全局路径,那么source目录需要写/
实例9:在远程自动创建目录 默认情况下,使用rsync的时候,不能自动创建级联目录。
1
rsync -a /data/1/2/3/1.txt 1.1.1.1:/data/1/2/3/1.txt
这样会报错的。改一改上边的命令
1
rsync -a /data/1/2/3/1.txt 1.1.1.1:/data/
这样同样也达不到想要的效果。虽然不在报错,但是只是把1.txt放到了1.1.1.1:/data/目录下。
rsync有个选项就是-R,会帮助我们自动创建级联目录。所以上边的命令应该改成
1
rsync -aR /data/1/2/3/1.txt 1.1.1.1:/data/
这样就会在1.1.1.1:/data/目录下创建1/2/3/这样的级联目录,类似mkdir -p
实例10:只同步指定类型的文件 需求:同步某个目录下所有的图片(*.jpg),该目录下有很多其他的文件,但只想同步*.jpg的文件。
rsync有一个 --exclude
可以排除指定文件,还有一个 --include
选项的作用正好和 --exclude
相反。
直接使用 --include="*.jpg"
可否实现?
1
rsync -av --include="*.jpg" /src/ /des/
实验证明,这是不对的。
正确的答案是:
1
rsync -av --include="*.jpg" --exclude=* /src/ /des/